declare global {
    interface DateConstructor extends DateConstructor_extension { }
    interface Date extends Date_extension { }
}
interface DateConstructor_extension {
    aDayTime: number,
}
interface Date_extension {
    date: number,
    readonly day: number,
    fullYear: number,
    hours: number,
    milliseconds: number,
    minutes: number,
    month: number,
    month2: number,
    seconds: number,
    time: number,
    readonly timezoneOffset: number,
    UTCDate: number,
    readonly UTCDay: number,
    UTCFullYear: number,
    UTCHours: number,
    UTCMilliseconds: number,
    UTCMinutes: number,
    UTCMonth: number,
    UTCSeconds: number,
}
const descriptors: PropertyDescriptorMap & ThisType<Date> = {
    date: {
        get() { return this.getDate() },
        set(value) { this.setDate(value) },
    },
    day: {
        get() { return this.getDay() },
    },
    fullYear: {
        get() { return this.getFullYear() },
        set(value) { this.setFullYear(value) },
    },
    hours: {
        get() { return this.getHours() },
        set(...value) { this.setHours(...value) },
    },
    milliseconds: {
        get() { return this.getMilliseconds() },
        set(value) { this.setMilliseconds(value) },
    },
    minutes: {
        get() { return this.getMinutes() },
        set(value) { this.setMinutes(value) },
    },
    month: {
        get() { return this.getMonth() },
        set(value) { this.setMonth(value) },
    },
    month2: {
        get() { return this.getMonth() + 1 },
        set(value) { this.setMonth(value - 1) },
    },
    seconds: {
        get() { return this.getSeconds() },
        set(value) { this.setSeconds(value) },
    },
    time: {
        get() { return this.getTime() },
        set(value) { this.setTime(value) },
    },
    timezoneOffset: {
        get() { return this.getTimezoneOffset() },
    },
    UTCDate: {
        get() { return this.getUTCDate() },
        set(value) { this.setUTCDate(value) },
    },
    UTCDay: {
        get() { return this.getUTCDay() },
    },
    UTCFullYear: {
        get() { return this.getUTCFullYear() },
        set(value) { this.setUTCFullYear(value) },
    },
    UTCHours: {
        get() { return this.getUTCHours() },
        set(value) { this.setUTCHours(value) },
    },
    UTCMilliseconds: {
        get() { return this.getUTCMilliseconds() },
        set(value) { this.setUTCMilliseconds(value) },
    },
    UTCMinutes: {
        get() { return this.getUTCMinutes() },
        set(value) { this.setUTCMinutes(value) },
    },
    UTCMonth: {
        get() { return this.getUTCMonth() },
        set(value) { this.setUTCMonth(value) },
    },
    UTCSeconds: {
        get() { return this.getUTCSeconds() },
        set(value) { this.setUTCSeconds(value) },
    },
}
const descriptors2: PropertyDescriptorMap & ThisType<DateConstructor> = {
    aDayTime: {
        "value": 86400000,
    },
}
Object.defineProperties(Date.prototype, descriptors)
Object.defineProperties(Date, descriptors2)